package com.yowasa.xiuxian.service.helper;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yowasa.xiuxian.entity.po.XiuxianUserTagPO;
import com.yowasa.xiuxian.mapper.XiuxianUserTagMapper;
import com.yowasa.xiuxian.service.RedisService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class UserTagHelper {
    public static final Logger logger = LoggerFactory.getLogger(UserTagHelper.class);
    @Autowired
    private XiuxianUserTagMapper xiuxianUserTagMapper;

    @Autowired
    private RedisService redisService;

    //获取值
    public int getValue(String userId, String tagName) {
        String key = "XiuxianTag:" + tagName + ":" + userId;
        logger.info("redis获取tag使用key：{}", key);
        Object o = redisService.get(key);
        logger.info("redis获取tag结果：{}", o);
        if(ObjectUtil.isNull(o)){
            XiuxianUserTagPO xiuxianUserTagPO = xiuxianUserTagMapper.selectOne(new LambdaQueryWrapper<XiuxianUserTagPO>()
                    .eq(XiuxianUserTagPO::getUserId, userId)
                    .eq(XiuxianUserTagPO::getTagName, tagName)
            );
            logger.info("数据库获取tag结果：{}",xiuxianUserTagPO);
            if (xiuxianUserTagPO == null) {
                redisService.set(key,0);
                return 0;
            }
            redisService.set(key,xiuxianUserTagPO.getTagValue());
            return xiuxianUserTagPO.getTagValue();
        }
        return (int)o;
    }

    //设置值
    public void setValue(String userId, String tagName, int value) {
        XiuxianUserTagPO xiuxianUserTagPO = xiuxianUserTagMapper.selectOne(new LambdaQueryWrapper<XiuxianUserTagPO>()
                .eq(XiuxianUserTagPO::getUserId, userId)
                .eq(XiuxianUserTagPO::getTagName, tagName)
        );
        if (xiuxianUserTagPO == null) {
            xiuxianUserTagPO = new XiuxianUserTagPO();
            xiuxianUserTagPO.setUserId(userId);
            xiuxianUserTagPO.setTagName(tagName);
            xiuxianUserTagPO.setTagValue(value);
            xiuxianUserTagMapper.insert(xiuxianUserTagPO);
        } else {
            xiuxianUserTagPO.setTagValue(value);
            xiuxianUserTagMapper.updateById(xiuxianUserTagPO);
        }
    }

    //增加n
    public void addValue(String userId, String tagName, int n) {
        XiuxianUserTagPO xiuxianUserTagPO = xiuxianUserTagMapper.selectOne(new LambdaQueryWrapper<XiuxianUserTagPO>()
                .eq(XiuxianUserTagPO::getUserId, userId)
                .eq(XiuxianUserTagPO::getTagName, tagName)
        );
        if (xiuxianUserTagPO == null) {
            xiuxianUserTagPO = new XiuxianUserTagPO();
            xiuxianUserTagPO.setUserId(userId);
            xiuxianUserTagPO.setTagName(tagName);
            xiuxianUserTagPO.setTagValue(n);
            xiuxianUserTagMapper.insert(xiuxianUserTagPO);
        } else {
            xiuxianUserTagPO.setTagValue(xiuxianUserTagPO.getTagValue() + n);
            xiuxianUserTagMapper.updateById(xiuxianUserTagPO);
        }
    }

    //增加1
    public void addOne(String userId, String tagName) {
        addValue(userId, tagName, 1);
    }


}
